iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
IT Operation

網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來系列 第 9

Day 09|OSPF Router 是怎麼認識彼此的?Hello、Neighbor、Adjacency

  • 分享至 

  • xImage
  •  

Day 08 第一次碰到 OSPF。

我原本的理解大概是:

Static Route 是自己一條一條寫路線,OSPF 則是 Router 自己去學路線。

這句話大致上沒有錯。

但仔細一想,問題馬上又來了:

Router 是要怎麼「自己學」?

假設今天有三台 Router:

R1 -------- R2 -------- R3

R1 怎麼知道旁邊有 R2?

R2 又怎麼知道 R3 也有在跑 OSPF?

Router 總不能開機之後突然心電感應:

R1:欸,隔壁是不是有人?
R2:有啊,我也是 OSPF。
R1:好,那我們交換一下地圖。

結果查下去才發現,OSPF 真的差不多就是這個流程。

只是它有正式名稱:

Hello
  ↓
Neighbor
  ↓
Adjacency
  ↓
交換資訊
  ↓
算出 Route

今天就先把這條線搞懂。


OSPF 不會一開始就知道隔壁是誰

先回到最基本的拓撲:

R1 -------- R2

假設:

R1
192.168.12.1

R2
192.168.12.2

而且兩台 Router 都已經設定 OSPF。

我之前會下意識覺得:

都設定 OSPF 了,所以它們應該就知道彼此吧?

其實不是。

OSPF 還是要先確認:

同一條網路上,有沒有其他 OSPF Router?

所以第一件事情不是算最短路徑,也不是直接交換完整 Routing Table,而是先送出 Hello Packet。


Hello Packet:有人在嗎?

OSPF Router 會定期送出 Hello Packet。

最白話的理解:

R1:
Hello~
這條線上有沒有也在跑 OSPF 的 Router?

R2 收到之後,也會送自己的 Hello:

R2:
有,我也是。

因此:

R1 -------- R2

R1 → Hello → R2
R1 ← Hello ← R2

這時候兩台 Router 才開始知道:

原來隔壁有人。

所以我現在會把 Hello Packet 理解成:

OSPF 的打招呼封包。

它的重要用途之一就是發現 Neighbor。


Neighbor 到底是什麼?

這裡我一開始很容易把 Neighbor 想成:

只要實體上接在旁邊,就是 Neighbor。

但比較準確一點是:

OSPF Neighbor 是兩台 OSPF Router 透過 Hello 發現彼此,而且相關參數符合之後建立的關係。

也就是:

有網路線連著

不一定代表:

OSPF Neighbor

例如:

R1 -------- R2

網路本身可能完全通,甚至:

ping 192.168.12.2

也可能成功。

但是如果 R2 根本沒有啟用 OSPF:

R1:Hello?
R2:……

那它們就不會建立 OSPF Neighbor。

所以這裡又讓我分清楚一件事情:

IP Connectivity

跟:

OSPF Neighbor Relationship

不是同一件事。


Hello 不是單純說「嗨」

再往下看,我才發現 Hello Packet 裡面不是只有一句 Hello。

Router 還會透過 Hello 確認一些 OSPF 參數。

概念上可以想成:

R1:
你好,我是 OSPF Router。
我的一些 OSPF 設定是這樣。

R2:
我也是。
讓我看看我們的設定能不能對得上。

有些重要設定如果不同,兩台 Router 就可能沒辦法正常成為 Neighbor。

例如常見的:

Area ID
Hello Timer
Dead Timer

等等。

這裡我目前先不死背全部。

今天真正重要的是理解:

Hello Packet 不只是找人,也是確認「我們能不能當 OSPF 鄰居」。


Area 又跑出來了

看到 Area ID 的時候,我又卡了一下。

OSPF 為什麼還需要 Area?

先不要一次把 Area 全部展開。

今天只先記一個概念:

OSPF 可以把一個很大的網路切成不同區域。

例如:

        Area 0

R1 -------- R2 -------- R3

最重要的一個區域叫:

Area 0

也叫:

Backbone Area

以後網路變大的時候,可以再出現 Area 1、Area 2、Area 3。

今天先知道:

兩台 Router 要建立正常的 OSPF 鄰居關係,Area 的設定很重要。

Area 為什麼存在,我想留到後面再拆。

不然現在很容易從 Neighbor 一路歪到大型企業網路設計去。


Neighbor 跟 Adjacency 又有什麼差?

接著又看到兩個很像的詞:

Neighbor
Adjacency

我一開始真的會直接把它們當成同一件事。

但概念上可以先分成兩層。

Neighbor

先發現對方:

R1:喔,原來你在這裡。
R2:對,我也看到你了。

這比較像:

我們知道彼此存在。

Adjacency

接下來建立更完整的 OSPF 關係,準備交換網路資訊。

可以把它想成:

Neighbor
↓
認識

Adjacency
↓
建立可以交換 OSPF 資訊的關係

所以我目前會記成:

Neighbor = 認識
Adjacency = 建立可以交換 OSPF 資訊的關係

這個說法雖然比較白話,但至少比把兩個字硬背起來有意義多了。


建立 Adjacency 之後要幹嘛?

假設現在:

R1 -------- R2 -------- R3

R1 跟 R2 建立 OSPF 關係。

R2 跟 R3 也建立 OSPF 關係。

接下來 Router 就要開始交換它們知道的網路資訊。

例如:

R1 後面有:

192.168.1.0/24

而:

R3 後面有:

192.168.3.0/24

R2 就像站在中間:

192.168.1.0/24
      |
     R1
      |
     R2
      |
     R3
      |
192.168.3.0/24

經過 OSPF 資訊交換後,R1 最後可以學到:

192.168.3.0/24

不是直接連在自己身上,卻知道:

要往 R2 那邊走。

這時:

show ip route

才可能看到 OSPF 學到的 Route:

O 192.168.3.0/24 ...

Day 08 看到的那個 O,現在終於開始知道它背後發生什麼事了。


所以不是 Hello 完就直接 Routing Table

這是今天我覺得很重要的一個修正。

如果把 OSPF 想得太簡單,很容易變成:

Hello
↓
Route

但實際概念比較像:

Hello
↓
發現 Neighbor
↓
建立 OSPF 關係
↓
交換網路狀態資訊
↓
建立對網路的理解
↓
計算最佳路徑
↓
放進 Routing Table

這樣 Day 08 講的 OSPF Cost 才有位置可以放。

Router 不是收到一個 Hello 就開始比 Cost。

而是得先:

認識其他 Router → 得到網路資訊 → 再算路。


那 OSPF 到底交換的是 Routing Table 嗎?

這邊也是一個很容易講錯的地方。

我原本可能會直接說:

OSPF Router 彼此交換 Routing Table。

但嚴格一點講,不應該這樣理解。

OSPF 是:

Link-State Routing Protocol

重點在 Link State。

也就是 Router 會交換網路連線狀態相關的資訊。

最後各台 Router 自己建立出對整個網路拓撲的理解,再自己算最佳路徑。

所以比較像:

R1:我這裡有哪些 Link
R2:我這裡有哪些 Link
R3:我這裡有哪些 Link

大家交換資訊之後,各自在腦中拼出:

R1 ----- R2 ----- R3

然後再去算:

我要去某個 Network,應該走哪一條路?

所以 OSPF 不只是:

你告訴我 Routing Table 長怎樣

而比較像:

你告訴我你看到的網路長怎樣
我自己來算路。

這樣也比較能理解為什麼它叫 Link-State。


Router 腦袋裡其實有不只一張「表」

Day 08 一直在看 Routing Table。

今天才開始發現,OSPF 內部其實還有其他資訊。

目前先不用背完整名稱,只先建立概念:

Neighbor 資訊
↓
誰是我的 OSPF 鄰居?

拓撲資訊
↓
整個 OSPF 網路大概長怎樣?

Routing Table
↓
最後真正拿來轉送封包的路線

也就是:

看見鄰居
    ↓
知道拓撲
    ↓
算出路線
    ↓
Routing Table

突然就比較能理解:

OSPF 並不是 Routing Table 本身。

OSPF 是一套讓 Router 學習網路、計算路徑的機制。

Routing Table 則是最後結果之一。


回頭串 Day 08 的 Cost

Day 08 學到 OSPF 可以根據 Cost 選路。

假設:

       R2
      /  \
     /    \
   R1      R4
     \    /
      \  /
       R3

R1 要到 R4 有兩條路:

R1 → R2 → R4

或:

R1 → R3 → R4

Day 08 直接在想:

哪條 Cost 比較低?

今天再往前補之後,完整流程應該是:

先找到 OSPF Neighbor
↓
建立關係
↓
交換 Link-State 資訊
↓
知道整個拓撲
↓
計算 Cost
↓
選出最佳路徑
↓
寫進 Routing Table

這樣 OSPF 的整條故事線終於開始連起來。


可以用什麼指令看?

在 Cisco Router 上,可以用:

show ip ospf neighbor

查看 OSPF Neighbor。

例如概念上可能看到:

Neighbor ID     State
2.2.2.2         FULL

現在看到 FULL,至少不再只是覺得:

反正 FULL 就是成功。

而是大概知道:

Router 已經跟這個 OSPF Neighbor 建立完整的鄰接關係。

另一個 Day 08 看過的:

show ip route

則是看最後 Routing Table。

所以兩個指令看的其實是不同階段:

show ip ospf neighbor
        ↓
OSPF 跟誰建立關係?

show ip route
        ↓
最後學到了哪些路?

這個差別我覺得很值得記。


Day 09 我真正要記住的不是指令

如果今天只背:

show ip ospf neighbor

過幾天大概又忘了。

我覺得真正要留下來的是這條:

OSPF Router
   ↓
Hello
   ↓
發現 Neighbor
   ↓
建立 Adjacency
   ↓
交換 Link-State 資訊
   ↓
知道網路拓撲
   ↓
計算 Cost
   ↓
選出最佳路徑
   ↓
Routing Table

Day 08 看到的是後半段:

Cost
→ Route
→ ECMP

今天才把前半段補起來。


Day 09 過關標準

Hello 是什麼?

OSPF Router 用來發現、維持 Neighbor 關係的重要封包。

Neighbor 是什麼?

兩台 OSPF Router 發現彼此,並確認相關設定能夠配合後形成的鄰居關係。

Adjacency 是什麼?

比單純「知道對方存在」更進一步,建立可以交換 OSPF 網路資訊的關係。

OSPF 是不是直接交換 Routing Table?

不能這樣簡化。

OSPF 是 Link-State Protocol。Router 交換網路的 Link-State 資訊,再自己計算最佳路徑。

Routing Table 又是什麼?

前面這一大串流程計算完之後,最後真正拿來決定封包往哪走的結果。


今天的一句話

OSPF 不是一開始就在算最短路徑,而是先用 Hello 找到鄰居,建立關係、交換網路資訊之後,才有辦法算出路線。

Day 08 問的是:

OSPF 怎麼選路?

Day 09 則往前追了一層:

OSPF 在選路以前,到底怎麼先知道網路長什麼樣子?

而答案的起點就是 Hello。


上一篇
Day 08|Static Route 不夠用怎麼辦?第一次搞懂 OSPF、Cost 與 ECMP
系列文
網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言